TCP pomoci synapse
Otázka od: Petr Daricek
7. 1. 2004 16:04
Muze mi nekdo poradit jak se nastavuji IP adresy a Porty v synapsi?
Mam nasledujici proceduru, ktera by mela naslouchat na prislusnem portu:
procedure TTCPDaemon.Execute;
var ClientSock:TSocket;
begin
with sock do
begin
CreateSocket;
setLinger(true,10); //Nastavi jak dlouho bude system cekat na zaslana
data
bind(FIP,FPortListen); //Vytvori a pripoji socket na IP a Port
if getlasterror<>0 then beep;
listen; //Nastavi socket do recieve modu
repeat
if terminated then break;
if canread(1000) then
begin
ClientSock:=accept;
if lastError=0 then
Begin
ServerTCP.Socket:=ClientSock;
ServerTCP.Now.SetEvent;
End;
end;
until false;
end;
end;
Jakou adresu mam dat do FIP pokud chci abych odchytil vsechny zpravy ktere
prijdou na FPortListenPort?
Za odpovedi dekuji
____________________________________________________________
Licitovat nejvyhodnejsi nabidku je postavene na hlavu! Skoda Octavia nyni se
zvyhodnenim az 90.000 Kc!
http://ad2.seznam.cz/redir.cgi?instance=68740%26url=http://www.skoda-
auto.cz/action/fast
Odpovedá: Petr Daricek
8. 1. 2004 16:54
Diky za predeslou odpoved,
ted mam jiny problem. Mam dva programy server a client. Client posila serveru
data a ceka na odpoved. Vsechny data od clienta k serveru dorazi v poradku, ale
nekdy se stane ze opacne server nemuze navazat spojeni (Connection Refused).
Asi delam neco blbe.
A jeste neexistuje nahodou dokumentace pro synapsi v cestine? Urychlilo by mi
to praci.
Metoda Serveru, ktera odpovida
procedure TTCPDeamonThrd.Accept(Data: widestring);
var nsock:TTCPBlockSocket;
MS:TMemoryStream;
begin
BasicRecive.Load(data);
nsock:=TTCPBlockSocket.Create;
try
// nsock.Connect(FIP,FPortAnswer);
// if nsock.lasterror = 0 then
begin
MS:=BasicRecive.Accept;
try
MS.Position:=0;
nsock.Connect(FIP,FPortAnswer);
if nsock.lasterror = 0 then
nsock.SendBuffer(MS.Memory,MS.Size)
else MessageDlg(nsock.GetErrorDesc(nsock.LastError), mtWarning, [mbOK],
0);
finally
MS.Free;
end;
end; //else MessageDlg(nsock.GetErrorDesc(nsock.LastError), mtWarning,
[mbOK], 0);
finally
nsock.Free;
End;
end;
Metoda Clienta
function TClientTCP.Answer:TMemoryStream;
var sock,sock2:TTCPBlockSocket;
ClientSock:TSocket;
Len:^int64;
Temp:pointer;
begin
Result:=nil;
Len:=nil;
sock:=TTCPBlockSocket.create;
try
new(Len);
with sock do
begin
CreateSocket;
setLinger(true,10); //Nastavi jak dlouho bude system cekat na zaslana
data
bind(IP,ListenPort); //Vytvori a pripoji socket na IP a Port
listen; //Nastavi socket do recieve modu
repeat
if canread(1000) then //Vraci true jestlize mohou by ze socketu nejaka
cteny data nebo
begin
ClientSock:=accept;
if lastError=0 then
Begin
sock2:=TTCPBlockSocket.Create;
sock2.Socket:=Clientsock;
sock2.GetSins;
with sock2 do
begin
RecvBufferEx(Len,sizeof(int64),60000);
if LastError<>0 then continue;
if Len^=0 then break;//Neni co nacitat
getmem(temp,Len^);
try
RecvBufferEX(temp,Len^,60000);
if LastError<>0 then continue;
Result:=TMemoryStream.Create;
Result.Write(Temp^,Len^);
finally
freemem(temp);
end;
Result.Position:=0;
end;
break;
end;
end;
until false;
end;
finally
sock.Free;
dispose(Len);
end;
end;
Za jakekoli pripominky predem dekuji Petr Daricek
================= Puvodni zprava =================
Od (From): "Lukas Gebauer" <gebylist@mlp.cz>
Komu (To): delphi-l@clexpert.cz
Kopie (Cc):
Predmet (Subject): Re: TCP pomoci synapse
Datum (Date): 8. 1. 2004 10:58
==================================================
> > Muze mi nekdo poradit jak se nastavuji IP adresy a Porty v synapsi?
> > Mam nasledujici proceduru, ktera by mela naslouchat na prislusnem
> > portu:
> [...]
> > Jakou adresu mam dat do FIP pokud chci abych odchytil vsechny zpravy
> > ktere prijdou na FPortListenPort?
>
> Viz, dokumentace, nebo Echo Demo...
>
> Pokud chces poslouchat na vsech IP adresach, ktere tvuj pocitac ma,
> pak pouzij IP '0.0.0.0'. Pokud chces poslouchat na vsech IPv6
> adresach, pak pouzij adresu '::0'.
>
> Poslouchat na vsech IPv4 a IPv6 adresach soucasne nejde, musis mit
> dva naslouchaci sockety pro kazdy protokol zvlast. (ale thread na
> obsluhu klienta je pak uz totozny.
>
> Pokud bys chtel poslouchat jen na urcite IP adrese (misto na vsech),
> pak misto techto univerzalnicvh adres pouzijes tu adresu, na ktere
> chces poslouchat.
>
>
> --
> Lukas Gebauer.
>
> E-mail: gebauerl@mlp.cz
> http://www.ararat.cz/synapse/ - Ararat Synapse - TCP/IP Lib.
>
>
>
____________________________________________________________
SonyEricsson T230 jiz od 1977Kc. Dost dobry duvod dat svemu staremu telefonu
kosem! http://ad2.seznam.cz/redir.cgi?instance=68588%26url=http://www.oskar.cz